import Koa from "koa";
// 跨域处理
import cors from "@koa/cors";
// 协议解析
import { koaBody } from "koa-body";
// 格式化json
import json from "koa-json";
// 静态资源
import statics from "koa-static";
// 整合中间件
import compose from "koa-compose";
// 处理安全相关的HTTP头，在收到请求时处理
import helmet from "koa-helmet";
// 路由
import router from "./src/routes/routes";
// 压缩文件
import compress from "koa-compress";
// 日志
import log4js from "@/utils/log4js";
// 使用env
const dotenv = require("dotenv");
// 环境变量
const isDevMode = process.env.NODE_ENV === "production" ? false : true;

// 加载环境变量
dotenv.config();

const app = new Koa();

// 集成中间件
const middleware = compose([
  koaBody({
    multipart: true,
    // formidable: {
    //   maxFileSize: 100 * 1024 * 1024,    // 设置上传文件大小最大限制，默认2M
    //   //uploadDir: 可以填写一个路径，不填写默认为 os.tmpDir()
    // }
  }),
  statics(__dirname, "/public"),
  cors(),
  json({ pretty: false, param: "pretty" }),
  helmet(),
]);

// 判断是否开发环境，否就压缩文件
if (!isDevMode) {
  app.use(compress());
}

app.use(middleware);

app.use(router());

app.on("error", (err, ctx) => {
  // console.error('server error', err, ctx)
  log4js.error(`${err.stack}`);
});

export default app;
